SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TTPAGO_MASI_I03]    
/*-------------------------------------------------------*/    
/*---Empresa              : OFISIS S.A.                --*/    
/*---Cliente              : OFISIS                     --*/    
/*---Sistema              : Tesoreria                  --*/    
/*---M,dulo               : Empresa                    --*/    
/*---Programa             : Graba Compr. de Retencion  --*/    
/*---                       Bancos Egresos             --*/    
/*---Script               : tdbanc_p.sql               --*/    
/*---Nombre SP            : SP_TTPAGO_MASI_I03         --*/    
/*---Desarrollado por     : Denis Villacres P.         --*/    
/*---Fecha Creaci,n       : 06/01/2004                 --*/    
/*---Base Datos           : Microsoft Sql Server       --*/    
/*---Versi,n              : 2000                       --*/    
/*---Invoca a SP          :                            --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---ModIficado 1 por     :Maribel Julca Rodriguez     --*/    
/*---Fecha ModIficaci,n   :22/01/2005                  --*/     
/*---Detalle ModIficaci,n :ingreso de campos CO_USUA_CREA, CO_USUA_MODI --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Comentarios                                       --*/    
/*---                                                  --*/    
/*---                                                  --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Drop Proc SP_TTPAGO_MASI_I03                      --*/    
/*---Grant all on SP_TTPAGO_MASI_I03 to public         --*/     
/*---SP_TTPAGO_MASI_I03                                --*/    
/*-------------------------------------------------------*/    
    
 @ISCO_EMPR   TD_VC_002,     
 @ISCO_USUA_MODI  TD_VC_008_USUA,    
 @ISCO_BANC   TD_VC_003,     
 @ISNU_CNTA_BANC  TD_VC_020,    
 @ISAA_BNCO   TD_VC_004,     
 @ISMM_BNCO   TD_VC_002,     
 @ISTI_MOVI_BANC  TD_VC_001,      
 @ISNU_COMP_BANC  TD_VC_008,     
 @IDFE_OPER   TD_DT_001,     
 @INFA_TIPO_CAMB  TD_NU_015_006,    
 @IDFE_DESD_RETE TD_DT_001,
 @ISCO_UNID_CNTB  TD_VC_003
	As
Begin    
    
Declare    
 @CSCO_PROV    TD_VC_020,     
 @CSTI_DOCU_ENTI   TD_VC_003,    
 @CSNU_DOCU_ENTI   TD_VC_020,    
 @CNIM_DETA    TD_NU_016_004,    
    
 @VSST_AGEN_RETE     TD_VC_001, --Si Empresa es Ag. Retenedor    
 @VSST_RETE          TD_VC_001, --Ag. Retenedor    
 @VSST_BCON          TD_VC_001, --Buen contribuyente    
 @VSST_SUJE_DETR     TD_VC_001, --Sujeto a Detraccion    
 @VSST_SUJE_RETE     TD_VC_001,     
 @VNIM_TOTA_DOCU     TD_NU_016_004,     
 @VDFE_EMIS_DOCU     TD_DT_001,     
 @VSCO_MONE_DOCU     TD_VC_003,     
 @VNIM_TOTA_CONV     TD_NU_016_004,     
 @VSST_DOCU_RETE     TD_VC_001,     
 @VNIM_DESD_RETE     TD_NU_016_004,     
 @VSCO_MONE_NACI     TD_VC_003,     
 @VSCO_MONE_EXTR     TD_VC_003,     
 @VSTI_CAMB          TD_VC_001,     
 @VSTI_ORIG          TD_VC_001,     
 @VSTI_DOCU_RETE     TD_VC_003,     
 @VNNU_SECU    TD_IN_001,    
 @VNNU_COMP_RETE     TD_IN_001,    
 @VSNU_COMP_RETE     TD_VC_020,    
 @VNIM_PAGO_CONV     TD_NU_016_004,     
 @VNIM_RETE          TD_NU_016_004,     
 @VNNU_PORC_RETE     TD_NU_016_004,    
 @VSNO_PROV          TD_VC_100,    
 @VSNU_RUCC          TD_VC_020,    
 @VNIM_MOVI_ANTE     TD_NU_016_004,    
 @VNIM_TOTA_DETA     TD_NU_016_004,    
 @VNNU_SECU_RETE  TD_IN_001,     

 @VNNU_TOTA       TD_IN_001,     
 @VNNU_LEID       TD_IN_001,     
 @VSCO_PROV_WHIL     TD_VC_020,    
 @VSTI_DOCU_WHIL     TD_VC_003,    
 @VSNU_DOCU_WHIL     TD_VC_020,    
 @VSCA_BUSQ          TD_VC_100,    
 @VNIM_PAGO_BANC     TD_NU_016_004,    
 @VNIM_DETA_CONV     TD_NU_016_004,    
 @VNIM_TOTA_NCRE     TD_NU_016_004,    
 @VNIM_TOTA_DIST     TD_NU_016_004,    
 @VNIM_PAGO_NCRE     TD_NU_016_004,    
 @VNIM_DETA_NCRE     TD_NU_016_004,     
 @VNIM_RETE_DETA     TD_NU_016_004,    
 @VNIM_RETE_NCRE     TD_NU_016_004,     
 @VDFE_EMIS_NCRE     TD_DT_001,      
 @VSCO_MONE_PAGO     TD_VC_003    
    
-- Busco el tipo de Dcmto Compr. de Retenci½n previo    
 Select   @VSTI_DOCU_RETE = TI_DOCU    
 From     TTDOCU_CNTB    
-- Where    ST_DOCU_0027 = 'S'    
Where    ST_DOCU_0021 = 'S'    
    
-- Busco parametros para la retencion    
Select    @VNIM_DESD_RETE = IM_MAXI_NRET,     
          @VSCO_MONE_NACI = CO_MONE_DEFA,    
          @VSCO_MONE_EXTR = CO_MONE_EXTR,     
          @VNNU_PORC_RETE = NU_PORC_RETE,    
          @VSST_AGEN_RETE = ST_AGEN_RETE    
From      TMPARA_TESO    
Where     CO_EMPR = @ISCO_EMPR    
    
-- Busco el tipo de cambio y tipo de origen    
Select    @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG    
From      TTFACA_OPCI    
Where     CO_EMPR = @ISCO_EMPR    
          And CO_MODU = 'TEEM0001'    
          And CO_MENU = 'FTEEPBM'    
    
If ( @VSTI_CAMB Is Null Or @VSTI_ORIG Is Null )    
Begin     
     Select    @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG    
     From      TMPARA_TESO    
     Where     CO_EMPR = @ISCO_EMPR    
End     
    
/*----------------------------------------------------------------*/    
    
CREATE TABLE #TWCORE_PREV     
(CO_ENTI  Varchar(20) Null,     
TI_DOCU_ENTI  Varchar(03) Null,    
NU_DOCU_ENTI  Varchar(20) Null,    
CO_MONE         Varchar(03) Null,    
IM_DOCU  Numeric(16,4) Null,    
IM_DETA         Numeric(16,4) Null)    
    
    
CREATE TABLE #TWCORE_PREV_NCRE    
(CO_ENTI  Varchar(20) Null,     
TI_DOCU_ENTI  Varchar(03) Null,    
NU_DOCU_ENTI  Varchar(20) Null,    
TI_DOCU_ORIG  Varchar(03) Null,    
NU_DOCU_ORIG  Varchar(20) Null,    
IM_DOCU  Numeric(16,4) Null,    
IM_DETA         Numeric(16,4) Null)    
    
    
CREATE TABLE #TWCORE_PREV_RESU     
(CO_ENTI    Varchar(20) Null,     
IM_DETA    Numeric(16,4) Null )    
    
    
DELETE   TDMOVI_BANC     
Where    CO_EMPR = @ISCO_EMPR    
         And CO_UNID_CONC = @ISCO_UNID_CNTB
         And CO_BANC = @ISCO_BANC    
         And NU_CNTA_BANC = @ISNU_CNTA_BANC    
         And AA_BNCO = @ISAA_BNCO    
         And MM_BNCO = @ISMM_BNCO    
         And TI_MOVI_BANC = @ISTI_MOVI_BANC    
         And NU_COMP_BANC = @ISNU_COMP_BANC    
         And TI_ENTI = 'P'    
         And TI_DOCU_ENTI = @VSTI_DOCU_RETE    
    
DELETE TDCORE_TECR    
FROM TCCORE_TECR T1, TDCORE_TECR T2    
WHERE T1.CO_EMPR = @ISCO_EMPR    
AND T1.CO_BANC = @ISCO_BANC    
AND T1.NU_CNTA_BANC = @ISNU_CNTA_BANC    
AND T1.AA_BACA = @ISAA_BNCO    
AND T1.MM_BACA = @ISMM_BNCO    
AND T1.NU_COMP_BACA = @ISNU_COMP_BANC    
AND T1.CO_EMPR = T2.CO_EMPR    
AND T1.NU_COMP_RETE = T2.NU_COMP_RETE    
    
DELETE TCCORE_TECR    
FROM TCCORE_TECR T1, TDCORE_TECR T2    
WHERE T1.CO_EMPR = @ISCO_EMPR    
AND T1.CO_BANC = @ISCO_BANC    
AND T1.NU_CNTA_BANC = @ISNU_CNTA_BANC    
AND T1.AA_BACA = @ISAA_BNCO    
AND T1.MM_BACA = @ISMM_BNCO    
AND T1.NU_COMP_BACA = @ISNU_COMP_BANC    
AND T1.CO_EMPR = T2.CO_EMPR    
AND T1.NU_COMP_RETE = T2.NU_COMP_RETE    
    
-- Inserto todos los documentos diferentes a NCR    
Insert Into #TWCORE_PREV (CO_ENTI, TI_DOCU_ENTI, NU_DOCU_ENTI, CO_MONE, IM_DOCU, IM_DETA)    
Select   CO_ENTI, TI_DOCU_ENTI, NU_DOCU_ENTI, CO_MONE_DOCU, IM_DOCU, IM_DETA    
From     TDMOVI_BANC    
Where    CO_EMPR = @ISCO_EMPR    
		 And CO_UNID_CONC = @ISCO_UNID_CNTB
         And CO_BANC = @ISCO_BANC    
         And NU_CNTA_BANC = @ISNU_CNTA_BANC    
         And AA_BNCO = @ISAA_BNCO    
         And MM_BNCO = @ISMM_BNCO    
         And TI_MOVI_BANC = @ISTI_MOVI_BANC    
         And NU_COMP_BANC = @ISNU_COMP_BANC    
         And TI_ENTI = 'P'    
         And TI_DOCU_ENTI Not In (Select TI_DOCU From TTDOCU_CNTB Where ST_DOCU_0004 = 'S')    
    
-- Inserto todos las NCR con sus documentos origenes    
Insert Into #TWCORE_PREV_NCRE (CO_ENTI, TI_DOCU_ENTI, NU_DOCU_ENTI, TI_DOCU_ORIG,     
  NU_DOCU_ORIG, IM_DOCU, IM_DETA)    
Select   T2.CO_PROV, T2.CO_TIPO_DOCU, T2.NU_DOCU_PROV, T2.TI_DOCU_ORIG, T2.NU_DOCU_ORIG,    
  T1.IM_DOCU, T1.IM_DETA    
From     TDMOVI_BANC T1, TMDOCU_PROV T2    
Where    T1.CO_EMPR = @ISCO_EMPR    
         And T1.CO_UNID_CONC = @ISCO_UNID_CNTB
         And T1.CO_BANC = @ISCO_BANC    
         And T1.NU_CNTA_BANC = @ISNU_CNTA_BANC    
         And T1.AA_BNCO = @ISAA_BNCO    
         And T1.MM_BNCO = @ISMM_BNCO    
         And T1.TI_MOVI_BANC = @ISTI_MOVI_BANC    
         And T1.NU_COMP_BANC = @ISNU_COMP_BANC    
         And T1.TI_ENTI = 'P'    
         And T1.TI_DOCU_ENTI Not In (Select TI_DOCU From TTDOCU_CNTB Where ST_DOCU_0003 = 'S')    
  And T1.CO_EMPR = T2.CO_EMPR    
  And T1.CO_ENTI = T2.CO_PROV    
  And T1.TI_DOCU_ENTI = T2.CO_TIPO_DOCU    
  And T1.NU_DOCU_ENTI = T2.NU_DOCU_PROV    
    
-- Actualizo importe de los documentos con las NCR que les hagan referencia    
Update  #TWCORE_PREV    
Set     #TWCORE_PREV.IM_DOCU = #TWCORE_PREV.IM_DOCU - (    
    Select  IsNull(Sum(IM_DOCU), 0)    
                  From    #TWCORE_PREV_NCRE    
                  Where   CO_ENTI = #TWCORE_PREV.CO_ENTI    
     AND TI_DOCU_ORIG = #TWCORE_PREV.TI_DOCU_ENTI    
     AND NU_DOCU_ORIG = #TWCORE_PREV.NU_DOCU_ENTI)    
From    #TWCORE_PREV_NCRE    
Where  #TWCORE_PREV.CO_ENTI = #TWCORE_PREV_NCRE.CO_ENTI    
  And #TWCORE_PREV.TI_DOCU_ENTI = #TWCORE_PREV_NCRE.TI_DOCU_ORIG    
 And #TWCORE_PREV.NU_DOCU_ENTI = #TWCORE_PREV_NCRE.NU_DOCU_ORIG    
    
-----------------------------------------------    
    
SELECT @VSCO_MONE_PAGO = NULL    
    
SELECT @VSCO_MONE_PAGO = CO_MONE    
FROM   TMCNTA_BANC    
WHERE  CO_EMPR = @ISCO_EMPR    
AND    CO_BANC = @ISCO_BANC    
AND    NU_CNTA_BANC = @ISNU_CNTA_BANC    
    
-- AGRUPO LOS MAYORES A 700 SOLES Y QUE ESTEN SUJETOS A RETENCI…N    
    
Insert Into #TWCORE_PREV_RESU    
Select    CO_ENTI, Isnull(Sum(Case When CO_MONE = @VSCO_MONE_NACI Then Isnull(IM_DOCU,0)     
                              Else ( Isnull(IM_DOCU,0) * @INFA_TIPO_CAMB) End),0)    
From    #TWCORE_PREV    
Where   TI_DOCU_ENTI In(Select TI_DOCU From TTDOCU_CNTB Where ST_RETE = 'S')    
Group By  CO_ENTI    
HAVING    Sum(Case When CO_MONE = @VSCO_MONE_NACI Then Isnull(IM_DOCU,0)    
              Else ( Isnull(IM_DOCU , 0) * @INFA_TIPO_CAMB) End) >= @VNIM_DESD_RETE    
    
---------------------------    
    
Declare CU_TTPAGO_MASI_I03_1 Cursor For    
Select  CO_ENTI, TI_DOCU_ENTI, NU_DOCU_ENTI, IM_DETA    
From    #TWCORE_PREV    
Where CO_ENTI IN (SELECT CO_ENTI FROM #TWCORE_PREV_RESU)    
    
Open CU_TTPAGO_MASI_I03_1    
Fetch CU_TTPAGO_MASI_I03_1 Into @CSCO_PROV, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI, @CNIM_DETA    
     
   While (@@Fetch_STATUS = 0)    
 Begin    
    If (@@Fetch_STATUS < 0)    
      Begin    
        CLOSE CU_TTPAGO_MASI_I03_1    
        DEALLOCATE CU_TTPAGO_MASI_I03_1    
        RETURN    
     End    
    
-- Agente retenedor y buen contribuyente    
     Select  @VSST_RETE = ST_RETE,     
             @VSST_BCON = ST_BCON,    
      @VSST_SUJE_DETR = ST_SUJE_DETR     
     From    TMAUXI_EMPR    
     Where   CO_EMPR = @ISCO_EMPR    
      And TI_AUXI_EMPR = 'P'    
      And CO_AUXI_EMPR = @CSCO_PROV    
    
-- Se verifica si el dcmto. es sujeto a retencion    
     Select  @VSST_SUJE_RETE = ST_RETE      
     From    TTDOCU_CNTB     
     Where   TI_DOCU = @CSTI_DOCU_ENTI     
    
-- Se verifica el monto del documento, fecha de emision    
     Select    @VSST_DOCU_RETE = NULL    
     Select    @VDFE_EMIS_DOCU = NULL    
     Select    @VSCO_MONE_DOCU = NULL    
     Select    @VNIM_TOTA_CONV = NULL    
    
 Select @VDFE_EMIS_DOCU = FE_EMIS,    
               @VSCO_MONE_DOCU = CO_MONE,     
               @VNIM_TOTA_DOCU = IM_TOTA    
 From  TMDOCU_PROV    
 Where  CO_EMPR = @ISCO_EMPR    
       And CO_PROV = @CSCO_PROV    
       And CO_TIPO_DOCU = @CSTI_DOCU_ENTI    
       And NU_DOCU_PROV = @CSNU_DOCU_ENTI    
       And (    
        (CO_IMP1 LIKE 'IG%' And IM_IMP1 != 0 ) or    
        (CO_IMP2 LIKE 'IG%' And IM_IMP2 != 0 ) or    
        (CO_IMP3 LIKE 'IG%' And IM_IMP3 != 0 )    
            )    
    
-- Se verifica el monto pagado por bancos    
     Select   @VNIM_PAGO_BANC = IM_DETA    
     From     TDMOVI_BANC    
     Where    CO_EMPR = @ISCO_EMPR    
              And CO_UNID_CONC = @ISCO_UNID_CNTB
              And CO_BANC = @ISCO_BANC    
              And NU_CNTA_BANC = @ISNU_CNTA_BANC    
              And AA_BNCO = @ISAA_BNCO    
              And MM_BNCO = @ISMM_BNCO    
              And TI_MOVI_BANC = @ISTI_MOVI_BANC    
              And NU_COMP_BANC = @ISNU_COMP_BANC    
              And TI_ENTI = 'P'    
              And CO_ENTI = @CSCO_PROV    
              And TI_DOCU_ENTI = @CSTI_DOCU_ENTI    
              And NU_DOCU_ENTI = @CSNU_DOCU_ENTI    
    
    
 Select @VNIM_TOTA_CONV = (Select OFITESO.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_DOCU,     
      @VSCO_MONE_NACI, @IDFE_OPER, @VNIM_TOTA_DOCU, @VSTI_CAMB,     
      @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @INFA_TIPO_CAMB))    
    
    
 Select @VNIM_PAGO_CONV = (Select OFITESO.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_PAGO, --@VSCO_MONE_DOCU,     
      @VSCO_MONE_NACI, @IDFE_OPER, @CNIM_DETA, @VSTI_CAMB,     
      @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @INFA_TIPO_CAMB))    
    
    
 Select @VNIM_DETA_CONV = (Select OFITESO.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_PAGO, --@VSCO_MONE_DOCU,     
      @VSCO_MONE_NACI, @IDFE_OPER, @VNIM_PAGO_BANC, @VSTI_CAMB,     
      @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @INFA_TIPO_CAMB))    
     
     --If @VDFE_EMIS_DOCU >= @IDFE_DESD_RETE And @VNIM_TOTA_CONV >= @VNIM_DESD_RETE    
    
     If @VDFE_EMIS_DOCU >= @IDFE_DESD_RETE    
     Begin    
       Select @VSST_DOCU_RETE = 'S'    
     End    
    
    
-- /* Fin de validaciones */    
    
     If @VSST_AGEN_RETE = 'S' And @VSST_RETE = 'N' And @VSST_BCON = 'N' And @VSST_SUJE_DETR = 'N' And @VSST_SUJE_RETE 
= 'S' And @VSST_DOCU_RETE = 'S'    
     Begin --begin principal    
         Select  @VNNU_SECU = IsNull(Max(NU_SECU),0) + 1    
         From    TDMOVI_BANC    
         Where   CO_EMPR = @ISCO_EMPR    
                 And CO_UNID_CONC = @ISCO_UNID_CNTB
                 And CO_BANC = @ISCO_BANC    
                 And NU_CNTA_BANC = @ISNU_CNTA_BANC    
                 And AA_BNCO = @ISAA_BNCO    
                 And MM_BNCO = @ISMM_BNCO    
                 And TI_MOVI_BANC = @ISTI_MOVI_BANC    
                 And NU_COMP_BANC = @ISNU_COMP_BANC    
    
          -- Busco el ultimo comprobante de retencion(previo) emitido    
          Select  @VNNU_COMP_RETE = IsNull(Max(Convert(Int, NU_COMP_RETE)),0) + 1    
          From    TCCORE_TECR    
          Where   CO_EMPR = @ISCO_EMPR    
    
          Select @VSNU_COMP_RETE = Replicate('0', 15-Len(@VNNU_COMP_RETE))+Convert(Varchar, @VNNU_COMP_RETE)    
    
          -- se calcula el importe retenido    
          Select @VNIM_RETE = Round((@CNIM_DETA * (@VNNU_PORC_RETE/100)), 2)    
          Select @VNIM_RETE_DETA = Round((@VNIM_DETA_CONV * (@VNNU_PORC_RETE/100)), 2)    
    
          -- Inserto los comprobantes de retencion en el detalle de bancos    
          Insert Into TDMOVI_BANC (CO_EMPR, CO_BANC, NU_CNTA_BANC, AA_BNCO, MM_BNCO, TI_MOVI_BANC,    
                  NU_COMP_BANC, NU_SECU, TI_ENTI, CO_ENTI, TI_DOCU_ENTI, NU_DOCU_ENTI, CO_MONE_DOCU,     
                  FE_DOCU, IM_DOCU, IM_SALD_DOCU, IM_DETA, IM_CONV_DOCU, ST_CIER_DOCU, IM_DETA_NEGA,     
                  IM_SALD_CONV, CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI, CO_UNID_CONC)
          Values (@ISCO_EMPR, @ISCO_BANC, @ISNU_CNTA_BANC, @ISAA_BNCO, @ISMM_BNCO, @ISTI_MOVI_BANC,    
          @ISNU_COMP_BANC, @VNNU_SECU, 'P', @CSCO_PROV, @VSTI_DOCU_RETE, @VSNU_COMP_RETE, @VSCO_MONE_NACI,     
                  @IDFE_OPER, @VNIM_RETE, @VNIM_RETE, @VNIM_RETE, @VNIM_RETE,     
                  'S', @VNIM_RETE*-1, @VNIM_RETE, @ISCO_USUA_MODI, GETDATE(), @ISCO_USUA_MODI, GETDATE(), @ISCO_UNID_CNTB)  
  
    
          If @@error <> 0    
             Begin    
               Return    
             End        
    
          --Se inserta el comprobante de retenci½n previo    
  Select  @VSNO_PROV = NO_AUXI, @VSNU_RUCC = NU_RUCS    
  From    TMAUXI_EMPR     
  Where   CO_EMPR = @ISCO_EMPR    
      And TI_AUXI_EMPR = 'P'    
      And CO_AUXI_EMPR = @CSCO_PROV    
    
          --Se inserta la cabecera    
  Insert Into TCCORE_TECR(CO_EMPR, NU_COMP_RETE, FE_COMP_RETE, CO_MONE, CO_PROV, NO_PROV, NU_RUCC,     
   FA_TIPO_CAMB, CO_BANC, NU_CNTA_BANC, AA_BACA, MM_BACA, NU_COMP_BACA, NU_DOCU, TI_SITU, NU_COMP_BANC,CO_USUA_CREA, 
FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI )    
  Values (@ISCO_EMPR, @VSNU_COMP_RETE, @IDFE_OPER, @VSCO_MONE_NACI, @CSCO_PROV, @VSNO_PROV, @VSNU_RUCC,     
               @INFA_TIPO_CAMB, @ISCO_BANC, @ISNU_CNTA_BANC, @ISAA_BNCO, @ISMM_BNCO, @ISNU_COMP_BANC, NULL, 
'ACT',@ISNU_COMP_BANC, 
	       @ISCO_USUA_MODI, GETDATE(), @ISCO_USUA_MODI, GETDATE())    
    
          If @@error <> 0    
             Begin    
               Return    
             End     
    
          --Se inserta el primer detalle    
          Select  @VNNU_SECU_RETE = IsNull(Max(NU_SECU),0) + 1    
          From    TDCORE_TECR    
          Where   CO_EMPR = @ISCO_EMPR    
                  And NU_COMP_RETE = @VSNU_COMP_RETE    
    
        Insert Into TDCORE_TECR(CO_EMPR, NU_COMP_RETE, NU_SECU, TI_DOCU, NU_DOCU, FE_EMIS,     
               IM_TOTA_CONV, IM_PAGO_CONV, IM_RETE_CONV, CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI)    
        Values (@ISCO_EMPR, @VSNU_COMP_RETE, @VNNU_SECU_RETE, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI, @VDFE_EMIS_DOCU,     
               @VNIM_TOTA_CONV, @VNIM_DETA_CONV, @VNIM_RETE_DETA, @ISCO_USUA_MODI, GETDATE(), @ISCO_USUA_MODI, GETDATE())    
    
  If @@error <> 0    
             Begin    
               Return    
             End     
    
          --para los demas detalles    
          Select @VNNU_TOTA = 0    
          Select @VNNU_LEID = 1    
    
          Select   @VNNU_TOTA = IsNull(Max(NU_SECU),0)    
          From     TDMOVI_BANC    
          Where    CO_EMPR = @ISCO_EMPR    
                   And CO_UNID_CONC = @ISCO_UNID_CNTB
                   And CO_BANC = @ISCO_BANC    
                   And NU_CNTA_BANC = @ISNU_CNTA_BANC    
                   And AA_BNCO = @ISAA_BNCO    
                   And MM_BNCO = @ISMM_BNCO    
                   And TI_MOVI_BANC = @ISTI_MOVI_BANC    
                   And NU_COMP_BANC = @ISNU_COMP_BANC    
                   And TI_ENTI = 'P'    
    
    
      While @VNNU_LEID <= @VNNU_TOTA    
      BEGIN    
    
               Select   @VSCO_PROV_WHIL = NULL    
               Select   @VSTI_DOCU_WHIL = NULL    
               Select   @VSNU_DOCU_WHIL = NULL    
               Select   @VSCA_BUSQ = NULL    
      -- Solo busco las notas de credito del detalle de bancos    
               Select   @VSCO_PROV_WHIL = CO_ENTI,     
                        @VSTI_DOCU_WHIL = TI_DOCU_ENTI,     
                        @VSNU_DOCU_WHIL = NU_DOCU_ENTI    
               From     TDMOVI_BANC    
               Where    CO_EMPR = @ISCO_EMPR    
                        And CO_UNID_CONC = @ISCO_UNID_CNTB
                        And CO_BANC = @ISCO_BANC    
                        And NU_CNTA_BANC = @ISNU_CNTA_BANC    
                        And AA_BNCO = @ISAA_BNCO    
                        And MM_BNCO = @ISMM_BNCO    
                        And TI_MOVI_BANC = @ISTI_MOVI_BANC    
                        And NU_COMP_BANC = @ISNU_COMP_BANC    
                        And TI_ENTI = 'P'    
                        And TI_DOCU_ENTI Not In (Select TI_DOCU From TTDOCU_CNTB Where ST_DOCU_0003 = 'S')    
                        And NU_SECU = @VNNU_LEID    
    
               Select   @VSCA_BUSQ = CO_PROV+TI_DOCU_ORIG+NU_DOCU_ORIG,     
                        @VDFE_EMIS_NCRE = FE_EMIS     
               From     TMDOCU_PROV     
               Where    CO_EMPR = @ISCO_EMPR    
                        And CO_PROV = @VSCO_PROV_WHIL    
                        And CO_TIPO_DOCU = @VSTI_DOCU_WHIL     
                        And NU_DOCU_PROV = @VSNU_DOCU_WHIL     
                            
    
               If @VSCA_BUSQ = @CSCO_PROV+@CSTI_DOCU_ENTI+@CSNU_DOCU_ENTI    
               Begin    
    
                    -- Se verifica el monto pagado por bancos    
                    Select   @VNIM_TOTA_NCRE = IM_DOCU,     
                             @VNIM_PAGO_NCRE = IM_DETA     
                    From     TDMOVI_BANC    
                    Where    CO_EMPR = @ISCO_EMPR    
                             And CO_UNID_CONC = @ISCO_UNID_CNTB
                             And CO_BANC = @ISCO_BANC    
                             And NU_CNTA_BANC = @ISNU_CNTA_BANC    
                             And AA_BNCO = @ISAA_BNCO    
                             And MM_BNCO = @ISMM_BNCO    
                             And TI_MOVI_BANC = @ISTI_MOVI_BANC    
                             And NU_COMP_BANC = @ISNU_COMP_BANC    
                             And TI_ENTI = 'P'    
                             And CO_ENTI = @VSCO_PROV_WHIL     
                             And TI_DOCU_ENTI = @VSTI_DOCU_WHIL    
                             And NU_DOCU_ENTI = @VSNU_DOCU_WHIL     
    
    
                Select @VNIM_DETA_NCRE = (Select OFITESO.dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_PAGO, --@VSCO_MONE_DOCU,     
                     @VSCO_MONE_NACI, @IDFE_OPER, @VNIM_PAGO_NCRE, @VSTI_CAMB,     
                     @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @INFA_TIPO_CAMB))    
    
          -- se calcula el importe retenido    
                    Select @VNIM_RETE_NCRE = Round((@VNIM_DETA_NCRE * (@VNNU_PORC_RETE/100)), 2)    
    
    
                   Select  @VNNU_SECU_RETE = IsNull(Max(NU_SECU),0) + 1    
                   From    TDCORE_TECR    
                   Where   CO_EMPR = @ISCO_EMPR    
                           And NU_COMP_RETE = @VSNU_COMP_RETE    
    
            Insert Into TDCORE_TECR(CO_EMPR, NU_COMP_RETE, NU_SECU, TI_DOCU, NU_DOCU, FE_EMIS,     
                         IM_TOTA_CONV, IM_PAGO_CONV, IM_RETE_CONV,CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI)    
            Values (@ISCO_EMPR, @VSNU_COMP_RETE, @VNNU_SECU_RETE, @VSTI_DOCU_WHIL, @VSNU_DOCU_WHIL, @VDFE_EMIS_NCRE,     
                         @VNIM_TOTA_NCRE, @VNIM_DETA_NCRE, @VNIM_RETE_NCRE, @ISCO_USUA_MODI, GETDATE(), @ISCO_USUA_MODI, 
GETDATE())    
              
                    If @@error <> 0    
                       Begin    
                         Return    
                       End     
    
               End    
    
       Select @VNNU_LEID = @VNNU_LEID + 1    
          END -- del While    
    
    
              
     End --del begin principal    
    
Fetch CU_TTPAGO_MASI_I03_1 Into @CSCO_PROV, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI, @CNIM_DETA    
END    
    
CLOSE CU_TTPAGO_MASI_I03_1    
DEALLOCATE CU_TTPAGO_MASI_I03_1    
    
    
    
-- **** PARA ACTUALIZAR LOS MONTOS ****    
Select   @VNIM_MOVI_ANTE  = IsNull(IM_MOVI,0)     
From     TCMOVI_BANC    
Where    CO_EMPR = @ISCO_EMPR
         And CO_UNID_CONC = @ISCO_UNID_CNTB    
         And CO_BANC = @ISCO_BANC    
         And NU_CNTA_BANC = @ISNU_CNTA_BANC    
         And AA_BNCO = @ISAA_BNCO    
         And MM_BNCO = @ISMM_BNCO    
         And TI_MOVI_BANC = @ISTI_MOVI_BANC    
         And NU_COMP_BANC = @ISNU_COMP_BANC    
    
-- Sumo todos los documentos    
Select   @VNIM_TOTA_DETA = IsNull(Sum(IsNull(IM_DETA_NEGA,0)),0)    
From     TDMOVI_BANC    
Where    CO_EMPR = @ISCO_EMPR    
         And CO_UNID_CONC = @ISCO_UNID_CNTB
         And CO_BANC = @ISCO_BANC    
         And NU_CNTA_BANC = @ISNU_CNTA_BANC    
         And AA_BNCO = @ISAA_BNCO    
         And MM_BNCO = @ISMM_BNCO    
         And TI_MOVI_BANC = @ISTI_MOVI_BANC    
         And NU_COMP_BANC = @ISNU_COMP_BANC    
         And TI_ENTI IN('C', 'P')    
         And RTRIM(ISNULL(CO_CNTA_EMPR, '')) = ''    
    
     Select  @VNIM_TOTA_DIST = Isnull(Sum(PatIndex(TI_MOVI_OPER, 'C')* IM_DETA - PatIndex(TI_MOVI_OPER, 'A')* IM_DETA),0) 
    
     From    TDMOVI_BANC    
     Where   CO_EMPR = @ISCO_EMPR    
     And CO_UNID_CONC = @ISCO_UNID_CNTB
     And CO_BANC = @ISCO_BANC    
     And NU_CNTA_BANC = @ISNU_CNTA_BANC    
     And AA_BNCO = @ISAA_BNCO    
     And MM_BNCO = @ISMM_BNCO    
     And TI_MOVI_BANC = @ISTI_MOVI_BANC    
     And NU_COMP_BANC = @ISNU_COMP_BANC    
     And RTRIM(ISNULL(CO_CNTA_EMPR, '')) != ''    
    
     Select  @VNIM_TOTA_DETA = @VNIM_TOTA_DETA + @VNIM_TOTA_DIST    
    
    
-- Actualizo la cabecera de bancos    
Update  TCMOVI_BANC    
Set     IM_MOVI = Round(@VNIM_TOTA_DETA,2),    
        CO_USUA_MODI = @ISCO_USUA_MODI,     
        FE_USUA_MODI = Getdate()             
Where   CO_EMPR = @ISCO_EMPR     
        And CO_UNID_CONC = @ISCO_UNID_CNTB
        And CO_BANC = @ISCO_BANC     
        And NU_CNTA_BANC = @ISNU_CNTA_BANC     
        And AA_BNCO = @ISAA_BNCO    
        And MM_BNCO = @ISMM_BNCO     
        And TI_MOVI_BANC = @ISTI_MOVI_BANC    
        And NU_COMP_BANC = @ISNU_COMP_BANC     
    
If @@error <> 0    
   Begin    
     Return    
   End     
    
-- **** FIN PARA ACTUALIZAR LOS MONTOS ****    
    
END    
/*------------------------- FIN ------------------------------ */

GO
